package cl.foursoft.sensordaemon.dao.implementation.postgresql;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import cl.foursoft.sensordaemon.dao.implementation.DBBase;
import cl.foursoft.sensordaemon.domain.Archivo;
import cl.foursoft.sensordaemon.repository.ArchivoDao;

public class ArchivoDB extends DBBase implements ArchivoDao {

	
	String idEdificio;
	String idPiso;
	String idZona;

	public ArchivoDB(Connection c){
		this.conn = c;
	}
	
	@Override
	public Archivo guardarArchivo(Archivo archivo) {

		
		File f = null;
	    FileReader fr = null;
	    BufferedReader br = null;
	      
		PreparedStatement pstmt = null; 
		
		String query = 	" INSERT INTO medicion_sensor_test( "
			+ " fecha_hora, id_sensor,id_medicion, id_consumo , valor_medicion , id_edificio, id_piso , id_zona, esalerta ) "
			+ " VALUES (? , ? , ? , ? ,? , ? , ? , ? , ? );";


		try
		{
			//cambiamos el estado de las
			pstmt = conn.prepareStatement(query);

			f = new File (archivo.getNombreArchivo());
	        fr = new FileReader (f);
	        br = new BufferedReader(fr);
	 
	         // Lectura del fichero
	        String linea;
	        int countLine = 0;
	        
	        String test = "2015-03-20 12:21:41	01E101030101@29.22";
	        while((linea=br.readLine())!=null){
	        	//Split necesarios para ver los detalles
	        	
	        	
	        	String [] detalles = linea.split("@");
	        	if(detalles.length==4){
		        	String idSensorCompleto = detalles[0];
		        	String fechaMedicion = detalles[1];
		        	String horaMedicion = detalles[2];
		        	String valorMedicion = detalles[3];
		        	
		        	String idMedicion = String.valueOf(idSensorCompleto.charAt(2));
		        	String numeroConsumo = String.valueOf(idSensorCompleto.charAt(3));
		        	String idConsumo = idMedicion+numeroConsumo;
		       
		        	if(!idSensorCompleto.equalsIgnoreCase("") && 
		        			idSensorCompleto.length()==12 && 
		        			!fechaMedicion.equalsIgnoreCase("") && 
		        			!horaMedicion.equalsIgnoreCase("") && 
		        			!valorMedicion.equalsIgnoreCase(""))
		        	{
		        		Date d = null;
		        		Timestamp Dsql = null;
						try {
							String parsearString = fechaMedicion + " " + horaMedicion;
							d = new SimpleDateFormat("dd_MM_yyyy HH_mm_ss").parse(parsearString);
							Dsql = new Timestamp(d.getTime());
						} catch (ParseException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	
						idEdificio = idSensorCompleto.substring(4, 6);
						idPiso = idSensorCompleto.substring(6, 8);
						idZona = idSensorCompleto.substring(8, 10);
						
						pstmt.setTimestamp(1, Dsql);
						pstmt.setString(2, idSensorCompleto);
						pstmt.setString(3, idMedicion);
						pstmt.setString(4, idConsumo);
						pstmt.setDouble(5, Double.parseDouble(valorMedicion));
						
						//Edificio, Piso, Zona
						pstmt.setString(6, idEdificio);
						pstmt.setString(7, idPiso);
						pstmt.setString(8, idZona);
						pstmt.setBoolean(9, false);
							
						
						int resp = pstmt.executeUpdate();
						
						if(resp < 0){
							archivo = null;
							break;
						}
						countLine++;
		        	}
	        	}
	        }
			pstmt.close();
			if(countLine == 0)
			{
				archivo = null;
			}
			
			Date fec  = new Date();
			System.out.println(" [{"+ fec +"}] Archivo guardadado");
		}
		catch (SQLException sqle) {
			System.out.println("Error en ArchivoDB -> guardarArchivo : " + sqle.getMessage());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally{
			if (pstmt != null) {
				try{
					pstmt.close();
				} 
				catch (SQLException e) {
					e.printStackTrace();
				}
			}
			try{                    
	            if( null != fr ){   
	               fr.close();     
	            }                  
	         }catch (Exception e2){ 
	            e2.printStackTrace();
	         }
		}
		return archivo;
	}

}
